Procedura ReadLn ignoruje CRLF

Otázka od: Pavel Hauptman

1. 6. 2004 10:01

Ahoj,

v D7 vytvarim konzolovou aplikaci, ktera nacte radky z jednoho text.souboru,
upravi je a ulozi do jineho text. souboru. problem nastane v pripade, ze
jsou je ve vstupnim souboru nekolik prazdnych radku za sebou ($0D0A0D0A).
Pokud procedurou readln prectu radek, jeho obsahem je string s nekolika
radky za sebou. Ve Watch okne se string zobrazi takto:
prvni_radek'#0#0#0#0'sesty_radek. Ale ja chci mit v tom stringu jen jeden
radek. Co s tim, kdyz nechci radek nacitat znak po znaku?

begin
  AssignFile(Desadv, '.\desadv.txt');
  Reset(Desadv);
  AssignFile(Orders, '.\orders.txt');
  Rewrite(Orders);

  while not eof(Desadv) do begin
    readln(Desadv, radek);
    Typ_Radku := radek;
    if Typ_Radku = 'HDR' then begin
      // upravim radek;
    end;
    writeln(Orders, radek);
  end;

  CloseFile(Desadv);
  CloseFile(Orders);
end.

Diky a s pozdravem

Pavel Hauptman

Odpovedá: Jaromir Solar

1. 6. 2004 10:23

> v D7 vytvarim konzolovou aplikaci, ktera nacte radky z jednoho
text.souboru,
> upravi je a ulozi do jineho text. souboru. problem nastane v pripade, ze
> jsou je ve vstupnim souboru nekolik prazdnych radku za sebou ($0D0A0D0A).
> Pokud procedurou readln prectu radek, jeho obsahem je string s nekolika
> radky za sebou. Ve Watch okne se string zobrazi takto:
> prvni_radek'#0#0#0#0'sesty_radek. Ale ja chci mit v tom stringu jen jeden
> radek. Co s tim, kdyz nechci radek nacitat znak po znaku?
>
> begin
> AssignFile(Desadv, '.\desadv.txt');
> Reset(Desadv);
> AssignFile(Orders, '.\orders.txt');
> Rewrite(Orders);

A jsou promenne Desadv a Orders typu TextFile?

S pozdravem

Ing. Jaromir Solar (jaromir.solar@magion.cz)
MAGION system a.s. (http://www.magion.cz)
Tel.: 571-499-316


Odpovedá: Pavel Hauptman

1. 6. 2004 10:20

Ano, jsou. Promenna radek je typu string.

PH.

> A jsou promenne Desadv a Orders typu TextFile?
>
> S pozdravem
>
> Ing. Jaromir Solar (jaromir.solar@magion.cz)